package com.artconcurrency.chapter1;

/**
 * @ClassName PACKAGE_NAME
 * Description: 比较多线程与串行执行的时间（即上下文切换）
 * <p>
 * <使用说明>
 * </p>
 * @Author tree
 * @Date 2019/5/1 10:05
 * @Version 1.0
 */
public class ConcurrencyTest {
    private static final long count = 1000000001;
    public static void main(String[] args) throws InterruptedException {
        concurrency();
        serial();
    }

    private static void concurrency() throws InterruptedException {
        long start = System.currentTimeMillis();
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                int a  = 0;
                for(long i = 0; i < count; i++){
                    a+=5;
                }
            }
        });
        thread.start();
        int b = 0;
        for (int i = 0; i < count; i++) {
            b--;
        }
        long time = System.currentTimeMillis()-start;
        thread.join();
        System.out.println("concurrency: " + time +"ms , b="+b);


    }

    private static void serial() {
        long start = System.currentTimeMillis();
        int a =0 ;
        for (int i = 0; i < count; i++) {
            a+= 5;
        }

        int b = 0;
        for (int i = 0; i < count; i++) {
            b--;
        }

        long time = System.currentTimeMillis()-start;
        System.out.println("serial: " + time +"ms , b="+b+", a= "+a);

    }
}
